clear;
clc;
addpath(genpath('./util'))

%大尺度衰弱参数
D0=1;
C0=10^(-30/10);
exponent_BS_LIS=2.2;
exponent_LIS_USER=2.8;

%BS位置
x_BS=0;
y_BS=0;
z_BS=25;

%LIS位置
x_IRS=0;
y_IRS=10;
z_IRS=40;

%用户位置范围
x_left=-50;
x_right=50;
y_left=10;
y_right=110;

%噪声功率
sigma=10^(-80/10)*10^(-3);

%发送功率
power=10^(45/10)*10^(-3);

%传输信噪比
rho = power/sigma/10^(14)

%BS-LIS距离
d_BS_LIS=sqrt((x_BS-x_IRS)^2+(y_BS-y_IRS)^2);
[pathGain_BS_LIS] = pathLOS(d_BS_LIS,D0,exponent_BS_LIS,C0)*10^(7)

L = 16;
K = 4;
M=8;

NUM_timesamples = 1;
pathGain = ones(K,1);
K_factor = 5*ones(K,1);
e=10^(-3);
%disp('H1');

p_correlation = 0.3*ones(K,1);
for k = 1:K  
    for kk=1:L
        for ll=1:L
            T2(kk,ll,k) = (p_correlation(k))^(abs(kk-ll));
        end
    end
end


for i=1:NUM_timesamples
    
    for k=1:K
        x_user=rand*(x_right-x_left)+x_left;
        y_user=rand*(y_right-y_left)+y_left;
        d_IRS_user=sqrt((x_user-x_IRS)^2+(y_user-y_IRS)^2)/1000;
        pathGain(k,1)=pathLOS(d_IRS_user,D0,exponent_LIS_USER,C0)*10^(7)
    end
    
    H1(:,:,i)=randn(L,M)+j*randn(L,M);
    H1(:,:,i) = H1(:,:,i)*sqrt(L*pathGain_BS_LIS/trace(H1(:,:,i)*H1(:,:,i)'));
    Hbar2(:,:,i) =randn(K,L)+j*randn(K,L);
    for ueIdx = 1:K
        T2(1:L,1:L,ueIdx) = pathGain(ueIdx)*(L/trace(T2(1:L,1:L,ueIdx)))*T2(1:L,1:L,ueIdx)/(K_factor(ueIdx)+1);
        Hbar2(ueIdx,1:L,i) = Hbar2(ueIdx,1:L,i) * sqrt(pathGain(ueIdx)) * sqrt(1/trace(Hbar2(ueIdx,1:L,i)*Hbar2(ueIdx,1:L,i)')) * sqrt(K_factor(ueIdx)/(K_factor(ueIdx)+1)) ;
    end
end        

almax = 10^2;
almin = 10^(0);

alpha_up = almax; %/rho
alpha_low = almin;%/rho

F_temp=eye(L);
P=20;
c1=2;
c2=2;
NUM=70;
f=0;
d=0.1;
e=1;
for i=1:NUM_timesamples
    i
    
       
    for ueIdx = 1:K
        taus(ueIdx)= 0; %rand;sqrt(0.01)
    end
   [ F_best_PSO,max_PSO,alpha1 ]=AO(P,c1,c2,L,NUM,K,T2,Hbar2(:,:,i),taus,rho,M,H1(:,:,i),e,"PSO",alpha_low,alpha_up);
   [ F_best_fix,max_fix,alpha2 ]=AO(P,c1,c2,L,NUM,K,T2,Hbar2(:,:,i),taus,rho,M,H1(:,:,i),e,"fix",alpha_low,alpha_up);
   max_PSO
    max_fix
end

